
.global _start

.global _bss_start
_bss_start:
	.word __bss_start		@使用连接脚本 imx6u.lds 中定义的符号 __bss_start

.global _bss_end
_bss_end:
	.word __bss_end		@使用连接脚本 imx6u.lds 中定义的符号 __bss_end

_start:
	/* 进入svn模式 */
	mrs r0, cpsr
	bic r0, #0x1f	@清零 cpsr M[4:0]
	orr r0, #0x13	@cpsr或上0x13，也就是svc模式
	msr cpsr, r0	@写cpsr

	/* 清零 .bss */
	//@ldr r0, =_bss_start	@语法错误
	ldr r0, _bss_start		//@正确的语法就是直接使用_bss_start符号，
	//						//@不是像之前写立即数到寄存器一样需要在立即数前面加上符号'='
	//@ldr r1, =_bss_end		@语法错误
	ldr r1, _bss_end
	//ldr r2, =0x0			//@ldr指令传送立即数到寄存器r0，立即数前面加上符号'='
	mov r2, #0				//@mov指令传送立即数到寄存器r0，立即数前面加上符号'#'

bss_loop:
	//ldmia r0!, {r2}	@语法错误，正确应该是 stmia，因为目的是写寄存器的值到内存中，所以应该是汇编 stm （store)
	stmia r0!, {r2}		@ia:Increase After
	cmp r0, r1			@比较r0, r1
	ble bss_loop		@如果r0小于等于r1，继续执行循环


	/* 准备C环境 */
	ldr sp, =0x80200000
	b main


